package com.事件处理event.小球的移动;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/** Java事件控制
 * 演示小球通过键盘控制上下左右的移动
 */
@SuppressWarnings("all")
public class BallMove extends JFrame{
    public static void main(String[] args) {
        new BallMove();
    }

    MyPanel mp = null;
    public BallMove(){
        mp = new MyPanel();
        this.add(mp);
        this.setSize(400,400);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //JFrame窗口对象就可以监听到键盘事件了，即可以监听MYyPanel面板发生的键盘事件；
        this.addKeyListener(mp);// -^^^^^
    }
}

/**
 * KeyListener 是监听器 ，可以监听键盘事件
 */

class MyPanel extends JPanel implements KeyListener {
    int x = 10,y = 10;
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillOval(x,y,30,30);//把xy设成变量，方便坐标移动后重绘
    }

    //有字符输出时 ， 就能监听到；
    @Override
    public void keyTyped(KeyEvent e) {

    }

    //当某个按键被按下时，该方法会被触发；
    @Override
    public void keyPressed(KeyEvent e) {
        //根据按下的按钮 进行判断；
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            x-=100;
            if(x < 0){
                x = this.getWidth() - 30;
            }
        }
        else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            x+=100;
            if(x >= this.getWidth()){
                x = 0;
            }
        }
        else if (e.getKeyCode() == KeyEvent.VK_UP) {
            y-=100;
            if(y < 0){
                y = this.getHeight() - 30;
            }
        }
        else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            y+=100;
            if(y >= this.getHeight()){
                y = 0;
            }
        }
// if (e.getKeyCode() == KeyEvent.VK_ENTER) {}
        this.repaint();//主动设置重绘，会主动调用paint方法，用新的x和y来重新画；

    }

    //当某个按键被松开时，该方法会被触发；
    @Override
    public void keyReleased(KeyEvent e) {

    }
}